<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>简单查询字符串(simple_query_string)查询 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'query-dsl-simple-query-string-query.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-simple-query-string-query.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-simple-query-string-query.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/query-dsl-simple-query-string-query.html" rel="nofollow" target="_blank">../en/query-dsl-simple-query-string-query.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="query-dsl.html">查询领域特定语言(Query DSL)</a></span>
»
<span class="breadcrumb-link"><a href="full-text-queries.html">全文查询</a></span>
»
<span class="breadcrumb-node">简单查询字符串(simple_query_string)查询</span>
</div>
<div class="navheader">
<span class="prev">
<a href="query-dsl-query-string-query.html">« 查询字符串(query_string)查询</a>
</span>
<span class="next">
<a href="geo-queries.html">地理位置(geo)查询 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="query-dsl-simple-query-string-query"></a>简单查询字符串(simple_query_string)查询
</h2>
</div></div></div>

<p>使用一个语法有限但可以容错的解析器，根据提供的查询字符串返回文档。</p>
<p>
这个查询使用一个<a class="xref" href="query-dsl-simple-query-string-query.html#simple-query-string-syntax" title="Simple query string syntax">简单的语法</a>来解析给定的查询字符串，并根据特殊的操作符将其拆分成多个词项。

然后，在返回匹配的文档之前，查询会单独<a class="xref" href="analysis.html" title="Text analysis">分析</a>每个词项。
</p>
<p>
虽然它的语法比<a class="xref" href="query-dsl-query-string-query.html" title="Query string query"><code class="literal">query_string</code>查询</a>更有限，但<code class="literal">simple_query_string</code>查询不会因为无效语法而返回错误。

相反，它会忽略查询字符串的任何无效部分。
</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="simple-query-string-query-ex-request"></a>请求示例
</h3>
</div></div></div>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
  "query": {
    "simple_query_string" : {
        "query": "\"fried eggs\" +(eggplant | potato) -frittata",
        "fields": ["title^5", "body"],
        "default_operator": "and"
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/164.console"></div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="simple-query-string-top-level-params"></a><code class="literal">simple_query_string</code>的顶级参数
</h3>
</div></div></div>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">query</code>
</span>
</dt>
<dd>
(必需的, string) search. 要解析并用于搜索的查询字符串。参考 <a class="xref" href="query-dsl-simple-query-string-query.html#simple-query-string-syntax" title="Simple query string syntax">简单查询字符串语法</a>.
</dd>
<dt>
<span class="term">
<code class="literal">fields</code>
</span>
</dt>
<dd>
<p>(可选, array of strings) 要搜索的字段的数组。</p>
<p>
该字段接受通配符表达式。还可以使用脱字符号(<code class="literal">^</code>)来提高匹配时的特定字段的相关性分数。

有关示例请参考 <a class="xref" href="query-dsl-simple-query-string-query.html#simple-query-string-boost" title="Wildcards and per-field boosts in the fields parameter"><code class="literal">fields</code>参数中的通配符和按字段增强</a>。
</p>
<p>
默认为 <code class="literal">index.query.default_field</code> 索引设置，其默认值为 <code class="literal">*</code>。

<code class="literal">*</code> 值提取符合条件查询的所有字段，并过滤元数据字段。

如果没有指定<code class="literal">prefix</code>，那么将所有提取的字段组合起来构建一个查询。
</p>
<div class="warning admon">
<div class="icon"></div>
<div class="admon_content">
<p>
一次可以查询的字段数量是有限制的。

它由<code class="literal">indices.query.bool.max_clause_count</code> <a class="xref" href="search-settings.html" title="Search settings">搜索设置</a>定义，默认为<code class="literal">1024</code>。
</p>
</div>
</div>
</dd>
<dt>
<span class="term">
<code class="literal">default_operator</code>
</span>
</dt>
<dd>
<p>(可选, string) 未指定运算符时，用于解释查询字符串中的文本的默认的布尔逻辑。有效值有：</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">OR</code> (默认)
</span>
</dt>
<dd>
比如，查询字符串 <code class="literal">capital of Hungary</code> 被解释为 <code class="literal">capital OR of OR Hungary</code>。
</dd>
<dt>
<span class="term">
<code class="literal">AND</code>
</span>
</dt>
<dd>
比如，查询字符串 <code class="literal">capital of Hungary</code> 被解释为 <code class="literal">capital AND of AND Hungary</code>。
</dd>
</dl>
</div>
</dd>
<dt>
<span class="term">
<code class="literal">all_fields</code>
</span>
</dt>
<dd>
<span class="Admonishment Admonishment--change">
[<span class="Admonishment-version u-mono u-strikethrough">6.0.0</span>]
<span class="Admonishment-detail">
在6.0.0中废弃。使用设置 <code class="literal">fields</code> 为 <code class="literal">*</code> 来代替
</span>
</span>(可选, boolean) 如果为<code class="literal">true</code>，则搜索索引字段映射中的所有可搜索字段。
</dd>
<dt>
<span class="term">
<code class="literal">analyze_wildcard</code>
</span>
</dt>
<dd>
(可选, boolean) 如果为 <code class="literal">true</code>，查询将尝试分析查询字符串中的通配符。默认为 <code class="literal">false</code>。
</dd>
<dt>
<span class="term">
<code class="literal">analyzer</code>
</span>
</dt>
<dd>
(可选, string) 用于将查询字符串中的文本转换为词元(token)的<a class="xref" href="analysis.html" title="Text analysis">分析器</a> 。

默认为字段 <code class="literal">default_field</code> 所映射的 <a class="xref" href="specify-analyzer.html#specify-index-time-analyzer" title="How Elasticsearch determines the index analyzer">索引时使用的分析器</a>。

如果没有映射分析器，则使用索引的默认分析器。
</dd>
<dt>
<span class="term">
<code class="literal">auto_generate_synonyms_phrase_query</code>
</span>
</dt>
<dd>
(可选, boolean) 如果为 <code class="literal">true</code>，将自动为多词项同义词创建 <a class="xref" href="query-dsl-match-query-phrase.html" title="Match phrase query">匹配短语(match phrase)</a> 查询。

默认为 <code class="literal">true</code>。

有关示例请参考 <a class="xref" href="query-dsl-simple-query-string-query.html#simple-query-string-synonyms" title="Synonyms">同义词</a>。
</dd>
<dt>
<span class="term">
<code class="literal">flags</code>
</span>
</dt>
<dd>
(可选, string) <a class="xref" href="query-dsl-simple-query-string-query.html#simple-query-string-syntax" title="Simple query string syntax">简单查询字符串语法</a>启用的运算符的列表。

默认为 <code class="literal">ALL</code> (所有运算符)。

有效值请参考 <a class="xref" href="query-dsl-simple-query-string-query.html#supported-flags" title="Limit operators">有限运算符</a>。
</dd>
<dt>
<span class="term">
<code class="literal">fuzzy_max_expansions</code>
</span>
</dt>
<dd>
(可选, integer) 模糊匹配查询能扩展到的最大词项数。默认为<code class="literal">50</code>。
</dd>
<dt>
<span class="term">
<code class="literal">fuzzy_prefix_length</code>
</span>
</dt>
<dd>
(可选, integer) 模糊匹配的起始字符保持不变的字符数量。默认为 <code class="literal">0</code>。
</dd>
<dt>
<span class="term">
<code class="literal">fuzzy_transpositions</code>
</span>
</dt>
<dd>
(可选, boolean) 如果为<code class="literal">true</code>，模糊匹配的编辑可以包含两个相邻字符的交换(ab → ba)。默认为 <code class="literal">true</code>。
</dd>
<dt>
<span class="term">
<code class="literal">lenient</code>
</span>
</dt>
<dd>
(可选, boolean) 如果为 <code class="literal">true</code>，则忽略基于格式的错误，例如为 <a class="xref" href="number.html" title="Numeric datatypes">numeric</a> 字段提供 text 值。
默认为 <code class="literal">false</code>。
</dd>
<dt>
<span class="term">
<code class="literal">minimum_should_match</code>
</span>
</dt>
<dd>
(可选, string) 要返回的文档必须匹配的最小子句数。

有效值及更多信息请参考 <a class="xref" href="query-dsl-minimum-should-match.html" title="minimum_should_match parameter"><code class="literal">minimum_should_match</code>参数</a>。
</dd>
<dt>
<span class="term">
<code class="literal">quote_field_suffix</code>
</span>
</dt>
<dd>
<p>(可选, string) 查询字符串中附加到引用文本的后缀。</p>
<p>可以使用此后缀来使用不同的分析方法进行精确匹配。参考 <a class="xref" href="mixing-exact-search-with-stemming.html" title="Mixing exact search with stemming">将精确搜索与词干混合</a>。</p>
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="simple-query-string-query-notes"></a>注意
</h3>
</div></div></div>
<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="simple-query-string-syntax"></a>简单查询字符串语法
</h4>
</div></div></div>
<p><code class="literal">simple_query_string</code>查询支持以下几个运算符：</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<code class="literal">+</code> 表示 AND 操作
</li>
<li class="listitem">
<code class="literal">|</code> 表示 OR 操作
</li>
<li class="listitem">
<code class="literal">-</code> 取消单个词元
</li>
<li class="listitem">
<code class="literal">"</code> 包裹一些词元以表示一个要搜索的短语
</li>
<li class="listitem">
<code class="literal">*</code> 在词项的末尾表示前缀查询
</li>
<li class="listitem">
<code class="literal">(</code> 和 <code class="literal">)</code> 表示优先
</li>
<li class="listitem">
<code class="literal">~N</code> 在一个词的后面时表示编辑距离(模糊性)
</li>
<li class="listitem">
<code class="literal">~N</code> 在一个短语后时表示溢出(slop)量
</li>
</ul>
</div>
<p>要按字面意思使用其中一个字符，请在前面加一个反斜杠(<code class="literal">\</code>)进行转义。</p>
<p>根据<code class="literal">default_operator</code>值的不同，这些运算符的行为可能会有所不同。例如:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
    "query": {
        "simple_query_string" : {
            "fields" : ["content"],
            "query" : "foo bar -baz"
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/165.console"></div>
<p>
该搜索请求旨在仅返回包含<code class="literal">foo</code>或<code class="literal">bar</code>但<span class="strong strong"><strong>不</strong></span>包含<code class="literal">baz</code>的文档。

然而，由于<code class="literal">default_operator</code>的值为<code class="literal">OR</code>，该搜索实际上返回包含<code class="literal">foo</code>或<code class="literal">bar</code>的文档以及不包含<code class="literal">baz</code>的任何文档。

要按预期返回文档，请将查询字符串改为 <code class="literal">foo bar +-baz</code>。
</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="supported-flags"></a>限制查询中可以使用的运算符
</h4>
</div></div></div>
<p>可以使用<code class="literal">flags</code>参数来限制简单查询字符串语法支持的运算符。</p>
<p>
若要显式地仅启用特定的操作符，请使用<code class="literal">|</code>分隔符。  

例如，<code class="literal">flags</code>值为<code class="literal">OR|AND|PREFIX</code>时会禁用除<code class="literal">OR</code>、<code class="literal">AND</code> 和 <code class="literal">PREFIX</code>之外的所有运算符。
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
    "query": {
        "simple_query_string" : {
            "query" : "foo | bar + baz*",
            "flags" : "OR|AND|PREFIX"
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/166.console"></div>
<div class="section">
<div class="titlepage"><div><div>
<h5 class="title">
<a id="supported-flags-values"></a>有效值
</h5>
</div></div></div>
<p>flags 的有效值有：</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">ALL</code> (默认)
</span>
</dt>
<dd>
启用所有可选的运算符。
</dd>
<dt>
<span class="term">
<code class="literal">AND</code>
</span>
</dt>
<dd>
启用 <code class="literal">+</code> (AND，和/与) 运算符。
</dd>
<dt>
<span class="term">
<code class="literal">ESCAPE</code>
</span>
</dt>
<dd>
启用<code class="literal">\</code>作为转义字符。
</dd>
<dt>
<span class="term">
<code class="literal">FUZZY</code>
</span>
</dt>
<dd>
启用单词后的<code class="literal">~N</code>运算符，其中<code class="literal">N</code>是表示匹配时允许的编辑距离的整数。参考<a class="xref" href="common-options.html#fuzziness" title="Fuzziness">模糊性</a>。
</dd>
<dt>
<span class="term">
<code class="literal">NEAR</code>
</span>
</dt>
<dd>
启用短语后的<code class="literal">~N</code>运算符，其中<code class="literal">N</code>是匹配词元之间允许的最大位置数。与<code class="literal">SLOP</code>同义。
</dd>
<dt>
<span class="term">
<code class="literal">NONE</code>
</span>
</dt>
<dd>
禁用所有运算符。
</dd>
<dt>
<span class="term">
<code class="literal">NOT</code>
</span>
</dt>
<dd>
启用 <code class="literal">-</code> (NOT，非) 运算符。
</dd>
<dt>
<span class="term">
<code class="literal">OR</code>
</span>
</dt>
<dd>
启用 <code class="literal">\|</code> (OR，或)运算符。
</dd>
<dt>
<span class="term">
<code class="literal">PHRASE</code>
</span>
</dt>
<dd>
启用用于搜索短语的<code class="literal">"</code>引号运算符。
</dd>
<dt>
<span class="term">
<code class="literal">PRECEDENCE</code>
</span>
</dt>
<dd>
允许 <code class="literal">(</code> 和 <code class="literal">)</code> 运算符控制运算符优先级。
</dd>
<dt>
<span class="term">
<code class="literal">PREFIX</code>
</span>
</dt>
<dd>
启用 <code class="literal">*</code> 前缀运算符。
</dd>
<dt>
<span class="term">
<code class="literal">SLOP</code>
</span>
</dt>
<dd>
启用短语后的<code class="literal">~N</code>运算符，其中<code class="literal">N</code>是匹配词元之间允许的最大位置数。与<code class="literal">NEAR</code>同义。
</dd>
<dt>
<span class="term">
<code class="literal">WHITESPACE</code>
</span>
</dt>
<dd>
启用空格作为分割字符。
</dd>
</dl>
</div>
</div>

</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="simple-query-string-boost"></a><code class="literal">fields</code>参数中的通配符和按字段增强
</h4>
</div></div></div>
<p>可以用通配符指定字段，例如：</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
  "query": {
    "simple_query_string" : {
      "query":    "Will Smith",
      "fields": [ "title", "*_name" ] <a id="CO48-1"></a><i class="conum" data-value="1"></i>
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/167.console"></div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO48-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>查询<code class="literal">title</code>、<code class="literal">first_name</code> 和 <code class="literal">last_name</code> 字段。</p>
</td>
</tr>
</table>
</div>
<p>单个字段可以用脱字符号(<code class="literal">^</code>)来增强：</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
  "query": {
    "simple_query_string" : {
      "query" : "this is a test",
      "fields" : [ "subject^3", "message" ] <a id="CO49-1"></a><i class="conum" data-value="1"></i>
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/168.console"></div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO49-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>字段<code class="literal">subject</code>的重要性是<code class="literal">message</code>的 3 倍。</p>
</td>
</tr>
</table>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="simple-query-string-synonyms"></a>同义词
</h4>
</div></div></div>
<p>
<code class="literal">simple_query_string</code>查询通过<a class="xref" href="analysis-synonym-graph-tokenfilter.html" title="Synonym graph token filter">synonym_graph</a>词元过滤器(token filter)支持多词项同义词扩展。

使用这个过滤器时，解析器为每个多词项同义词创建一个短语查询。

例如，下面的同义词 <code class="literal">"ny, new york"</code>将产生产生：
</p>
<p><code class="literal">(ny OR ("new york"))</code></p>
<p>也可以用逻辑与来匹配多词项同义词：</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
   "query": {
       "simple_query_string" : {
           "query" : "ny city",
           "auto_generate_synonyms_phrase_query" : false
       }
   }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/169.console"></div>
<p>上面的例子创建了一个 bool 查询：</p>
<p><code class="literal">(ny OR (new AND york)) city)</code></p>
<p>
它匹配带有词项 <code class="literal">ny</code> 或 逻辑与 <code class="literal">new AND york</code> 的文档。
默认情况下，参数 <code class="literal">auto_generate_synonyms_phrase_query</code> 设置为 <code class="literal">true</code>。
</p>
</div>

</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="query-dsl-query-string-query.html">« 查询字符串(query_string)查询</a>
</span>
<span class="next">
<a href="geo-queries.html">地理位置(geo)查询 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>